home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
PPC1B3AA.ZIP
/
READ.PPS
< prev
next >
Wrap
Text File
|
1996-08-29
|
13KB
|
2,023 lines
;----------------------------------------------------------------------------
; Copyright(C) 1996, CyZ/Peanuts
;----------------------------------------------------------------------------
;
; FUNCTION Read()
;
; Advanced input line function handling Insert mode, del, Home, end, etc...
;
; Courtesy of CyZ/Peanuts
;----------------------------------------------------------------------------
#lib
#nouser
Declare Function Read(Integer X, Integer Y, Integer LENGTH, Boolean WWRAP) String
;----------------------------------------------------------------------------
Function Read(Integer X, Integer Y, Integer LENGTH, Boolean WWRAP) String
INTEGER MAX, I
BOOLEAN EX, INS
STRING KEYREAD
BIGSTR TEMP
STRING C1, C2, C3, C4
;░▒▓█ VARIABLE INITIALISATION █▓▒░
C1="@X0F"
C2="@X07"
C3="@X08"
C4="@X03"
EX=0
;░▒▓█ THE MIGHTY BUGFIX - POSITION CURSOR █▓▒░
ANSIPOS X,Y
;░▒▓█ CHECK FOR WORDWRAP █▓▒░
IF (GETENV("WRAP")<>"") THEN
PRINT GETENV("WRAP")
MAX=X+LEN(STRIPATX(GETENV("WRAP")))
SETENV ("WRAP=")
ELSE
MAX=X
ENDIF
;░▒▓█ GET USER INPUT █▓▒░
While ( ex=0 ) do
KEYREAD="" : WHILE (KEYREAD="") KEYREAD=INKEY()
;░▒▓█ INSERT MODUS █▓▒░
IF (KEYREAD="INS") THEN
IF (INS=0) THEN INS=1
ELSE INS=0
ENDIF
ENDIF
;░▒▓█ CHECK FOR SPECIAL KEYS █▓▒░
IF ((KEYREAD="DEL")&(MAX<>GETX())) THEN
TEMP=GETX()
PRINT SCRTEXT(GETX()+1,Y,MAX-GETX(),1)
I=MAX-TEMP
BACKUP I
DEC MAX
ENDIF
IF (KEYREAD="HOME") THEN
backup getx()-x
ENDIF
IF (KEYREAD="END") THEN
FORWARD MAX-GETX()
ENDIF
IF (KEYREAD="LEFT") THEN
IF (GETX()>X) BACKUP 1
ENDIF
IF (KEYREAD="RIGHT") THEN
IF ( (GETX()<MAX) & (GETX()-X<LENGTH)) FORWARD 1
ENDIF
;░▒▓█ THE FAMOUS WRAPPING ROUTINE █▓▒░
If ( (MAX=X+LENGTH) & (WWRAP=1) & (len(keyread)=1) & (asc(keyread)>27)) Then
TEMP=""
; ░▒▓█ SAVE WRAP STRING █▓▒░
WHILE (SCRTEXT(X+LENGTH-1-I,Y,1,0)<>" ") INC I
IF (I<LENGTH) THEN
TEMP=SCRTEXT(X+LENGTH-I,Y,I,1)
SELECT CASE (ASC(KEYREAD))
Case 28..31, 33..47, 58..64, 91..96, 123..255
KEYREAD=C3+KEYREAD
Case 48..57
KEYREAD=C4+KEYREAD
Case 65..90
KEYREAD=C1+KEYREAD
Case 97..122
KEYREAD=C2+KEYREAD
END SELECT
TEMP="WRAP="+STRING(TEMP)+STRING(KEYREAD)
SETENV (TEMP)
KEYREAD=""
; ░▒▓█ UPDATE DISPLAY █▓▒░
IF (X+LENGTH<>GETX()) FORWARD X+LENGTH-GETX()
BACKUP I
PRINT SPACE(I+1)
EX=1
ENDIF
ENDIF
;░▒▓█ THE FAMOUS WRAPPING ROUTINE ENDS HERE █▓▒░
;░▒▓█ CHECK FOR CHARS █▓▒░
IF (LEN(KEYREAD)>1) KEYREAD=""
Select Case (asc(keyread))
Case 8
IF (!(GETX()=X)) THEN
IF (MAX=GETX()) THEN
BACKUP 1
PRINT " "
BACKUP 1
DEC MAX
ELSE
BACKUP 1
I=X+LENGTH-GETX()+1
PRINT SCRTEXT(GETX()+1,Y,I,1)+" "
DEC MAX
BACKUP I+1
ENDIF
ENDIF
Case 13
ex=1
Case 0..28
keyread=""
Case 32
IF (!(MAX>=LENGTH+X)) THEN
IF (INS) THEN
TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
PRINT " "+TEMP
backup len(stripatx(temp))
inc max
ELSE
PRINT " "
IF (GETX()>MAX) MAX=GETX()
ENDIF
ENDIF
Case 28..31, 33..47, 58..64, 91..96, 123..255
IF (!(MAX>=LENGTH+X)) THEN
IF (INS) THEN
TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
PRINT C3+KEYREAD+TEMP
backup len(stripatx(temp))
inc max
ELSE
PRINT C3+KEYREAD
IF (GETX()>MAX) MAX=GETX()
ENDIF
ENDIF
Case 48..57
IF (!(MAX>=LENGTH+X)) THEN
IF (INS) THEN
TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
PRINT C4+KEYREAD+TEMP
backup len(stripatx(temp))
inc max
ELSE
PRINT C4+KEYREAD
IF (GETX()>MAX) MAX=GETX()
ENDIF
ENDIF
Case 65..90
IF (!(MAX>=LENGTH+X)) THEN
IF (INS) THEN
TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
PRINT C1+KEYREAD+TEMP
backup len(stripatx(temp))
inc max
ELSE
PRINT C1+KEYREAD
IF (GETX()>MAX) MAX=GETX()
ENDIF
ENDIF
Case 97..122
IF (!(MAX>=LENGTH+X)) THEN
IF (INS) THEN
TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
PRINT C2+KEYREAD+TEMP
backup len(stripatx(temp))
inc max
ELSE
PRINT C2+KEYREAD
IF (GETX()>MAX) MAX=GETX()
ENDIF
ENDIF
End select
endwhile
;░▒▓█ SAVE STRING! █▓▒░
READ=SCRTEXT(x,y,max-x,0)
; If you need to save the string WITH colors, change the last SCRTEXT
; Parameter to ,1 AND change both function declarations to
; BIGSTRING:
;
; DECLARE FUNCTION READ(INTEGER X, INTEGER Y, INTEGER LENGTH, BOOLEAN WWRAP) BIGSTR
; FUNCTION READ(INTEGER X, INTEGER Y, INTEGER LENGTH, BOOLEAN WWRAP) BIGSTR
;
endfunc
;░▒▓█ HOW TO SETUP A NEW COLOR █▓▒░
;
; CASE XXX (XXX can be any ascii array, 31..44, etc...)
;
; IF (!(MAX>=LENGTH+X)) THEN
;
; IF (INS) THEN
;
; TEMP=SCRTEXT(GETX(),Y,MAX-GETX(),1)
; PRINT CX+KEYREAD+TEMP
;
; * CX is the Color Code, type "@X" codes or declare the
; * Variable in the DECLARE and INITIALIZE Variables Section
;
; backup len(stripatx(temp))
; inc max
;
; ELSE
;
; PRINT CX+KEYREAD
; IF (GETX()>MAX) MAX=GETX()
; ENDIF
;
; ENDIF
;
; DOn't forget to adjust the wordwrapping routine also!